home *** CD-ROM | disk | FTP | other *** search
- /*
- File: Power.h
-
- Contains: Power Manager Interfaces.
-
- Version: Technology: System 7.5
- Release: Universal Interfaces 3.0d3 on Copland DR1
-
- Copyright: © 1984-1996 by Apple Computer, Inc. All rights reserved.
-
- Bugs?: If you find a problem with this file, send the file and version
- information (from above) and the problem description to:
-
- Internet: apple.bugs@applelink.apple.com
- AppleLink: APPLE.BUGS
-
- */
- #ifndef __POWER__
- #define __POWER__
-
- #ifndef __TYPES__
- #include <Types.h>
- #endif
- #if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
- #ifndef __MIXEDMODE__
- #include <MixedMode.h>
- #endif
- #endif
- #if FOR_SYSTEM8_PREEMPTIVE
- #ifndef __KERNEL__
- #include <Kernel.h>
- #endif
- #ifndef __NAMEREGISTRY__
- #include <NameRegistry.h>
- #endif
- #endif
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #if PRAGMA_IMPORT_SUPPORTED
- #pragma import on
- #endif
-
- #if PRAGMA_ALIGN_SUPPORTED
- #pragma options align=mac68k
- #endif
-
- #if FOR_SYSTEM8_PREEMPTIVE
- /*
- ========================================================================================
-
- The top of this file contains the Power Management interfaces used in Copland.
-
- The pre-Copland interfaces are below right after a large and obnoxious comment.
-
- ========================================================================================
- */
- /*
- //••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-
- Low level (I/O architecture) interface
-
- //••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
- */
- /*
- //------------------------------------------------------------------------------------
-
- Power Management usage monitoring.
-
- High level families call PMMonitorUsage for each hardware device they maintain.
- Power management will periodically send messages to the family requesting the
- current UsageCount for each device.
- If power management determines that a device is idle it may be taken off-line.
- Prior to doing so power managment will send a message instructing the family to
- prepare for the device being off-line. When the device is reqired again the family
- uses PMPrepareDevice to instruct power management to bring the device back on-line.
-
- //------------------------------------------------------------------------------------
- */
- typedef UInt32 PMUsageCount;
- typedef struct OpaquePMMonitorRef* PMMonitorRef;
- extern OSStatus PMMonitorUsage(RegEntryRef *deviceToBeMonitored, ObjectID adminMessageObject, void *refCon, PMMonitorRef *newRef);
-
- extern OSStatus PMStopMonitoring(PMMonitorRef ref);
-
- /*
- //------------------------------------------------------------------------------------
-
- Device Power State Management
-
- If a family maintains a device which is capable of switching between multiple
- power states, the family should inform power management of the device's
- capabilities and wait for messages directing it to change the device's power
- state.
-
- //------------------------------------------------------------------------------------
- */
-
- enum {
- kPMDeviceDescriptionInitialVersion = 1
- };
-
- typedef OSType PMDeviceStateID;
- typedef UInt32 PMDeviceStateFlags;
-
- enum {
- kPMDevicePoweredMask = 0x0001, /* device powered vs. not */
- kPMDeviceConfiguredMask = 0x0002, /* internal configuration retained vs. not */
- kPMDeviceUsableMask = 0x0004, /* "on-line" vs "off-line" (usable or not) */
- kPMDevicePowerLowestMask = 0x0100, /* set for device's highest state */
- kPMDevicePowerHighestMask = 0x0200 /* set for device's lowest state */
- };
-
- struct PMDeviceState {
- PMDeviceStateID id; /* state identifier - not interpreted by power management */
- UInt32 relativeConsumption; /* relative ranking of power consumption */
- PMDeviceStateFlags flags; /* one or more of the bits defined above */
- };
- typedef struct PMDeviceState PMDeviceState;
-
- struct PMDeviceDescriptionHdr {
- UInt32 version;
- UInt32 numberOfStates;
- };
- typedef struct PMDeviceDescriptionHdr PMDeviceDescriptionHdr;
-
- struct PMDeviceDescription {
- PMDeviceDescriptionHdr header;
- PMDeviceState states[2];
- };
- typedef struct PMDeviceDescription PMDeviceDescription;
-
- typedef struct OpaquePMManageRef* PMManageRef;
- extern OSStatus PMManageDeviceState(RegEntryRef *deviceToBeManaged, ObjectID adminMessageObject, PMDeviceDescription *deviceStates, ByteCount descriptionSize, PMDeviceStateID currentState, void *refCon, PMManageRef *newRef);
-
- extern OSStatus PMNewDeviceState(PMManageRef manageRef, PMDeviceDescription *newStates, ByteCount stateSize, PMDeviceStateID currentState);
-
- extern OSStatus PMStopManaging(PMManageRef ref);
-
- /*
- //------------------------------------------------------------------------------------
-
- Power Management notification.
-
- Any entity in the I/O architecture can use these routines to be notified about
- changes to device.
-
- Clients use a mask to specify which device aspects they are interested in and
- also to specify when to be notified. Flags describing the new state are generated
- and delivered with the notification.
-
- If the client is interested in power being removed and re-applied, they can request
- it with (kPMNotifyAlwaysMask | kPMNotifyPowerMask). When the notification is
- delivered the client can check the new flags against kPMNotifyBeforeMask and
- kPMNotifyAfterMask to determine if the change has already occured or not. And can
- check against kPMDevicePoweredMask to determine if the device will have power or
- not in the new state.
-
- //------------------------------------------------------------------------------------
- */
- typedef UInt32 PMNotifyFlags;
-
- enum {
- kPMNotifyPowerMask = 0x00000001,
- kPMNotifyConfigurationMask = 0x00000002,
- kPMNotifyUsabilityMask = 0x00000004,
- kPMNotifyAllMask = 0x00000007,
- kPMNotifyBeforeMask = 0x40000000, /* notification sent before change */
- kPMNotifyAfterMask = 0x80000000, /* notification sent after change */
- kPMNotifyAlwaysMask = 0xC0000000 /* notification sent before and after */
- };
-
- typedef struct OpaquePMNotifyRef* PMNotifyRef;
- extern OSStatus PMNotifyStateChange(RegEntryRef *interestingDevice, ObjectID adminMessageObject, PMNotifyFlags notifyFlags, void *refCon, PMNotifyRef *newRef);
-
- extern OSStatus PMStopNotification(PMNotifyRef ref);
-
- /*
- //------------------------------------------------------------------------------------
-
- Power Management message
-
- This structure is used for all types of power management communication - usage
- monitoring, state change notification, and state change commands.
-
- //------------------------------------------------------------------------------------
- */
-
- enum {
- kPMRetrieveUsageCountMessage = 1,
- kPMChangeDeviceStateMessage = 2,
- kPMNotifyStateChangeMessage = 3
- };
-
- union PMMessageData {
- PMNotifyFlags newStateFlags; /* used in kPMNotifyStateChangeMessage */
- PMDeviceStateID targetState; /* used in kChangeDeviceStateMessage */
- };
- typedef union PMMessageData PMMessageData;
-
- struct PMMessage {
- UInt32 ampReserved; /* reserved for use by AdminMessagePort service */
- UInt32 messageCode; /* one of the message codes above */
- void * refCon; /* */
- PMMessageData data; /* message-specific extra data */
- };
- typedef struct PMMessage PMMessage;
-
- /*
- //------------------------------------------------------------------------------------
-
- Restoring an off-line or powered off device to a usable state.
-
- When a device that has been taken off-line or has had its power removed is needed
- again, the following routine should be called. This routine will return when after
- the device has been restored (or has failed to be restored). Part of the restoration
- process is delivering notifications to interested parties - kPMPowerRestore and/or
- kPMPrepareOnLine messages will be delivered and processed before this routine
- returns.
-
- //------------------------------------------------------------------------------------
- */
- extern OSStatus PMMakeDeviceUsable(RegEntryRef *whichDevice);
-
- /*
- //------------------------------------------------------------------------------------
-
- Disabling & Re-Enabling power managment of a device.
-
- Power management of a specific device can be disabled - this may be desirable
- because of a resource reservation on some device.
- Families can implement a family specific API on top of this that can allow
- an application to turn off power management for a particular volume or display
- device.
-
- When power management of some device is disabled usage monitoring will still
- occur, but there will not be any requests to change the device state. The
- domain of which the device is a member will not be changed either.
-
- //------------------------------------------------------------------------------------
- */
- extern OSStatus PMDisablePowerManagement(RegEntryRef *whichDevice);
-
- extern OSStatus PMEnablePowerManagement(RegEntryRef *whichDevice);
-
- /*
- //••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-
- Domain Controller Power Management Plug-In interface.
-
- //••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
- */
- /*
- //------------------------------------------------------------------------------------
-
- Domain description
-
- //------------------------------------------------------------------------------------
- */
-
- enum {
- kPMDomainDescriptionInitialVersion = 1
- };
-
- typedef OSType PMDomainID;
- typedef OSType PMDomainLevelID;
- typedef UInt32 PMDomainLevelFlags;
-
- enum {
- kPMDomainOffMask = 0x0000,
- kPMDomainFreezeMask = (kPMDevicePoweredMask | kPMDeviceConfiguredMask),
- kPMDomainReducedMask = (kPMDomainFreezeMask | kPMDeviceUsableMask),
- kPMDomainFullMask = (kPMDomainReducedMask | kPMDevicePowerHighestMask)
- };
-
- struct PMDomainLevel {
- PMDomainLevelID levelID;
- PMDomainLevelFlags flags;
- };
- typedef struct PMDomainLevel PMDomainLevel;
-
- struct PMDomainDescriptionHdr {
- UInt32 descriptionVersion;
- PMDomainID domainID;
- UInt32 numberOfLevels;
- };
- typedef struct PMDomainDescriptionHdr PMDomainDescriptionHdr;
-
- struct PMDomainDescription {
- PMDomainDescriptionHdr header;
- PMDomainLevel levels[2];
- };
- typedef struct PMDomainDescription PMDomainDescription;
-
- /*
- //------------------------------------------------------------------------------------
-
- Domain plugin.
- Plugin init routine returns pointer to a domain description as an out parameter.
-
- //------------------------------------------------------------------------------------
- */
-
- enum {
- kPMDomainPluginVersion = 0x01000000
- };
-
- typedef OSStatus (*PMDomainPluginInitProc)(PMDomainDescription **domain, UInt32 *numberOfDomains);
- typedef OSStatus (*PMDomainPluginSetLevelProc)(PMDomainID domainID, PMDomainLevelID levelID);
- struct PMDomainPluginDispatchTable {
- UInt32 version;
- UInt32 reserved[3];
-
- PMDomainPluginInitProc init;
- PMDomainPluginSetLevelProc setLevel;
- };
- typedef struct PMDomainPluginDispatchTable PMDomainPluginDispatchTable;
-
- /*
- //••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-
- Platform plugin.
-
- //••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
- */
-
- enum {
- kPMPlatformPluginVersion = 0x01000000
- };
-
- typedef OSStatus (*PMSleepProc)(OSType *services, UInt32 numberOfServices);
- typedef OSStatus (*PMHibernateProc)(OSType *services, UInt32 numberOfServices);
- typedef OSStatus (*PMShutdownProc)(OSType *services, UInt32 numberOfServices);
- typedef OSStatus (*PMRestartProc)(OSType *services, UInt32 numberOfServices);
- struct PMPlatformPlugin {
- UInt32 version;
- UInt32 reserved[3];
-
- PMSleepProc sleep;
- PMHibernateProc hibernate;
- PMShutdownProc shutdown;
-
- PMRestartProc restart;
- };
- typedef struct PMPlatformPlugin PMPlatformPlugin;
-
- /*
- //••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-
- High level (application) interface.
-
- //••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
- */
- /*
- Disk timer: the time a disk must be idle before it is spun down (or other
- power management actions are taken). Applies to all disks, but each disk
- has its own timer (one can stay spun up while the others are spun down).
-
- The minimum will be enforced.
-
- These API control system-wide parameters for the power management of disk devices.
- For control over a specific disk see the <Block Storage or File System> API.
-
-
- */
-
- enum {
- kPMDiskSpinDownDisabled = 0
- };
-
- extern OSStatus PMSetDiskSpinDownTimeout(UInt32 seconds);
-
- extern UInt32 PMGetDiskSpinDownTimeout(void );
-
- extern UInt32 PMGetMinimumDiskSpinDownTimeout(void );
-
- /*
- Display timer: the period of time in which there has been no user input
- before a display is dimmed or turned off. Applies to all displays, but
- each display has its own timer.
-
- The minimum will be enforced.
- */
-
- enum {
- kPMDisplayDimmingDisabled = 0
- };
-
- extern OSStatus PMSetDisplayDimmingTimeout(UInt32 seconds);
-
- extern UInt32 PMGetDisplayDimmingTimeout(void );
-
- extern UInt32 PMGetMinimumDisplayDimmingTimeout(void );
-
- /*
- Idle state timer: the period of time in which all devices must be idle
- before the system is [?]. Basically, this is the timer for whatever action
- the user chose to happen when the system is idle. Could be sleep, hibernate,
- or shutdown. If the user has explicitly disabled any action the routines
- return an error.
-
- The minimum will be enforced and will be greater than or equal to the
- maximum of disk spin down and display dimming times.
- */
-
- enum {
- kPMIdleStateDisabled = 0
- };
-
- extern OSStatus PMSetIdleStateTimeout(UInt32 seconds);
-
- extern UInt32 PMGetIdleStateTimeout(void );
-
- extern UInt32 PMGetMinimumIdleStateTimeout(void );
-
- /*
- Idle state: routines to get and set the action to be taken when power
- management has determined that the system is idle.
- Disabled: nothing happens when the machine is idle
- Sleep is a soft definition - depends on the hardware: differs
- between portable and desktop systems.
- Hibernate: save everthing and shutdown, on boot reload the saved
- state.
- Shutdown: just shutdown, nothing restored on boot.
- */
-
- enum {
- kPMIdleStateKindShutdown = 1,
- kPMIdleStateKindHibernate = 2,
- kPMIdleStateKindSleep = 3
- };
-
- extern OSStatus PMSetIdleStateKind(UInt32 idleStateKind);
-
- extern UInt32 PMGetIdleStateKind(void );
-
- /*
- Misc. timers: These allow for programmable shutdown and power on. These are
- real absolute times - turn off at 6:00pm Jan 12 and back on at 8:00am Feb 1.
- The 'DateAndTimeSpec' is a made-up placeholder.
-
- Shutdown is a real shutdown.
- IdleAction puts the machine into the chosen idle state - if the machine is
- shutdown at the that time nothing happens.
- PowerOn is either a normal boot or a return-from-idle depending on whether
- the system is shutdown or is in its idle state.
- */
- #define kPMClearTime (ConstTimeObjectPtr) NULL
- extern OSStatus PMSetShutdownTime(ConstTimeObjectPtr when);
-
- extern OSStatus PMGetShutdownTime(TimeObjectPtr when);
-
- extern OSStatus PMSetIdleStateTime(ConstTimeObjectPtr when);
-
- extern OSStatus PMGetIdleStateTime(TimeObjectPtr when);
-
- extern OSStatus PMSetPowerOnTime(ConstTimeObjectPtr when);
-
- extern OSStatus PMGetPowerOnTime(TimeObjectPtr when);
-
- /* Immediate control over system state*/
- extern OSStatus PMRestart(void );
-
- extern OSStatus PMEnterIdleState(UInt32 idleStateKind);
-
- /*
- //------------------------------------------------------------------------------------
-
- Other high level API.
-
- Other families may want to implement their own power management API that is built
- on top of the API presented here. Examples are the ability to turn off power
- management of a specific storage volume or a specific graphics display. The battery
- family will want/need to export a high level API that can show battery state.
-
- //------------------------------------------------------------------------------------
- */
- /*
- //••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-
- User activity monitoring.
-
- These routine are used by software that is interested in the lack of and resumption
- of user activity. The usage model is as follows: software requests to be notified
- when all user activity has ceased for a specified amount of time. Once that
- notification has been delivered any user activity will cause the second notification
- to be delivered immediately. After delivery of the resume notification, the reference
- is invalid and software must request notification again if it so desires.
-
- //••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
- */
- typedef struct OpaquePMUserMonitorRef* PMUserMonitorRef;
- extern OSStatus PMMonitorUserActivity(UInt32 minutesIdle, KernelNotification *howToNotifyIdle, KernelNotification *howToNotifyResume, PMUserMonitorRef *newRef);
-
- extern OSStatus PMCancelMonitoring(PMUserMonitorRef refToCancel);
-
- #endif
- /*
- ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-
-
- Everything below this comment is the System 7.x Power Manager
-
- This comment is really large and obnoxious so that the separation can be easily
- found when scrolling through the file.
-
-
- ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
- */
- #if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
-
- enum {
- /* Bit positions for ModemByte */
- modemOnBit = 0,
- ringWakeUpBit = 2,
- modemInstalledBit = 3,
- ringDetectBit = 4,
- modemOnHookBit = 5, /* masks for ModemByte */
- modemOnMask = 0x01,
- ringWakeUpMask = 0x04,
- modemInstalledMask = 0x08,
- ringDetectMask = 0x10,
- modemOnHookMask = 0x20, /* bit positions for BatteryByte */
- chargerConnBit = 0,
- hiChargeBit = 1,
- chargeOverFlowBit = 2,
- batteryDeadBit = 3,
- batteryLowBit = 4,
- connChangedBit = 5, /* masks for BatteryByte */
- chargerConnMask = 0x01,
- hiChargeMask = 0x02,
- chargeOverFlowMask = 0x04,
- batteryDeadMask = 0x08,
- batteryLowMask = 0x10,
- connChangedMask = 0x20
- };
-
-
- enum {
- /* commands to SleepQRec sleepQProc */
- sleepRequest = 1,
- sleepDemand = 2,
- sleepWakeUp = 3,
- sleepRevoke = 4,
- sleepUnlock = 4,
- sleepDeny = 5,
- sleepNow = 6,
- dozeDemand = 7,
- dozeWakeUp = 8,
- dozeRequest = 9, /* SleepQRec.sleepQFlags */
- noCalls = 1,
- noRequest = 2,
- slpQType = 16,
- sleepQType = 16
- };
-
- /* bits in bitfield returned by PMFeatures */
-
- enum {
- hasWakeupTimer = 0, /* 1=wakeup timer is supported */
- hasSharedModemPort = 1, /* 1=modem port shared by SCC and internal modem */
- hasProcessorCycling = 2, /* 1=processor cycling is supported */
- mustProcessorCycle = 3, /* 1=processor cycling should not be turned off */
- hasReducedSpeed = 4, /* 1=processor can be started up at reduced speed */
- dynamicSpeedChange = 5, /* 1=processor speed can be switched dynamically */
- hasSCSIDiskMode = 6, /* 1=SCSI Disk Mode is supported */
- canGetBatteryTime = 7, /* 1=battery time can be calculated */
- canWakeupOnRing = 8, /* 1=can wakeup when the modem detects a ring */
- hasDimmingSupport = 9, /* 1=has dimming support built in */
- hasStartupTimer = 10 /* 1=startup timer is supported */
- };
-
- /* bits in bitfield returned by GetIntModemInfo and set by SetIntModemState */
-
- enum {
- hasInternalModem = 0, /* 1=internal modem installed */
- intModemRingDetect = 1, /* 1=internal modem has detected a ring */
- intModemOffHook = 2, /* 1=internal modem is off hook */
- intModemRingWakeEnb = 3, /* 1=wakeup on ring is enabled */
- extModemSelected = 4, /* 1=external modem selected */
- modemSetBit = 15 /* 1=set bit, 0=clear bit (SetIntModemState) */
- };
-
- /* bits in BatteryInfo.flags */
- /* ("chargerConnected" doesn't mean the charger is plugged in) */
-
- enum {
- batteryInstalled = 7, /* 1=battery is currently connected */
- batteryCharging = 6, /* 1=battery is being charged */
- chargerConnected = 5 /* 1=charger is connected to the PowerBook */
- };
-
-
- enum {
- HDPwrQType = 0x4844, /* 'HD' hard disk spindown queue element type */
- PMgrStateQType = 0x504D /* 'PM' Power Manager state queue element type */
- };
-
- /* client notification bits in PMgrQueueElement.pmNotifyBits */
-
- enum {
- pmSleepTimeoutChanged = 0,
- pmSleepEnableChanged = 1,
- pmHardDiskTimeoutChanged = 2,
- pmHardDiskSpindownChanged = 3,
- pmDimmingTimeoutChanged = 4,
- pmDimmingEnableChanged = 5,
- pmDiskModeAddressChanged = 6,
- pmProcessorCyclingChanged = 7,
- pmProcessorSpeedChanged = 8,
- pmWakeupTimerChanged = 9,
- pmStartupTimerChanged = 10,
- pmHardDiskPowerRemovedbyUser = 11
- };
-
- /* System Activity Selectors */
-
- enum {
- OverallAct = 0, /* general type of activity */
- UsrActivity = 1, /* user specific type of activity */
- NetActivity = 2, /* network specific activity */
- HDActivity = 3 /* Hard Drive activity */
- };
-
- /* Storage Media sleep mode defines */
-
- enum {
- kMediaModeOn = 0, /* Media active (Drive spinning and at full power) */
- kMediaModeStandBy = 1, /* Media standby (not implemented) */
- kMediaModeSuspend = 2, /* Media Idle (not implemented) */
- kMediaModeOff = 3 /* Media Sleep (Drive not spinning and at min power, max recovery time) */
- };
-
-
- enum {
- kMediaPowerCSCode = 70
- };
-
- struct ActivityInfo {
- short ActivityType; /* Type of activity to be fetched. Same as UpdateSystemActivity Selectors */
- unsigned long ActivityTime; /* Time of last activity (in ticks) of specified type. */
- };
- typedef struct ActivityInfo ActivityInfo;
-
- /* information returned by GetScaledBatteryInfo */
- struct BatteryInfo {
- UInt8 flags; /* misc flags (see below) */
- UInt8 warningLevel; /* scaled warning level (0-255) */
- UInt8 reserved; /* reserved for internal use */
- UInt8 batteryLevel; /* scaled battery level (0-255) */
- };
- typedef struct BatteryInfo BatteryInfo;
-
- typedef SInt8 ModemByte;
- typedef SInt8 BatteryByte;
- typedef long PMResultCode;
- typedef struct SleepQRec SleepQRec;
- typedef SleepQRec *SleepQRecPtr;
- typedef struct HDQueueElement HDQueueElement;
- typedef struct PMgrQueueElement PMgrQueueElement;
- /*
- This ProcPtr uses register based parameters on the 68k and cannot
- be written in or called from a high-level language without the help of
- mixed mode or assembly glue.
-
- typedef pascal long (*SleepQProcPtr)(long message, SleepQRecPtr qRecPtr);
-
- */
- typedef pascal void (*HDSpindownProcPtr)(HDQueueElement *theElement);
- typedef pascal void (*PMgrStateChangeProcPtr)(PMgrQueueElement *theElement, long stateBits);
-
- #if GENERATINGCFM
- typedef UniversalProcPtr SleepQUPP;
- typedef UniversalProcPtr HDSpindownUPP;
- typedef UniversalProcPtr PMgrStateChangeUPP;
- #else
- typedef Register68kProcPtr SleepQUPP;
- typedef HDSpindownProcPtr HDSpindownUPP;
- typedef PMgrStateChangeProcPtr PMgrStateChangeUPP;
- #endif
- struct SleepQRec {
- SleepQRecPtr sleepQLink; /* pointer to next queue element */
- short sleepQType; /* queue element type (must be SleepQType) */
- SleepQUPP sleepQProc; /* pointer to sleep universal proc ptr */
- short sleepQFlags; /* flags */
- };
-
- struct HDQueueElement {
- struct HDQueueElement * hdQLink; /* pointer to next queue element */
- short hdQType; /* queue element type (must be HDPwrQType) */
- short hdFlags; /* miscellaneous flags */
- HDSpindownUPP hdProc; /* pointer to routine to call */
- long hdUser; /* user-defined (variable storage, etc.) */
- };
-
- struct PMgrQueueElement {
- struct PMgrQueueElement * pmQLink; /* pointer to next queue element */
- short pmQType; /* queue element type (must be PMgrStateQType) */
- short pmFlags; /* miscellaneous flags */
- long pmNotifyBits; /* bitmap of which changes to be notified for */
- PMgrStateChangeUPP pmProc; /* pointer to routine to call */
- long pmUser; /* user-defined (variable storage, etc.) */
- };
-
- struct BatteryTimeRec {
- unsigned long expectedBatteryTime; /* estimated battery time remaining (seconds) */
- unsigned long minimumBatteryTime; /* minimum battery time remaining (seconds) */
- unsigned long maximumBatteryTime; /* maximum battery time remaining (seconds) */
- unsigned long timeUntilCharged; /* time until battery is fully charged (seconds)*/
- };
- typedef struct BatteryTimeRec BatteryTimeRec;
-
- struct WakeupTime {
- unsigned long wakeTime; /* wakeup time (same format as current time) */
- Boolean wakeEnabled; /* 1=enable wakeup timer, 0=disable wakeup timer */
- SInt8 filler;
- };
- typedef struct WakeupTime WakeupTime;
-
- struct StartupTime {
- unsigned long startTime; /* startup time (same format as current time) */
- Boolean startEnabled; /* 1=enable startup timer, 0=disable startup timer */
- SInt8 filler;
- };
- typedef struct StartupTime StartupTime;
-
- extern pascal OSErr DisableWUTime(void );
-
- extern pascal OSErr SetWUTime(long WUTime);
-
- extern pascal OSErr GetWUTime(long *WUTime, Byte *WUFlag);
-
- extern pascal OSErr BatteryStatus(Byte *Status, Byte *Power);
-
- extern pascal OSErr ModemStatus(Byte *Status);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 IdleUpdate
- #endif
- extern pascal long IdleUpdate(void )
- ONEWORDINLINE(0xA285);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 GetCPUSpeed
- #endif
- extern pascal long GetCPUSpeed(void )
- TWOWORDINLINE(0x70FF, 0xA485);
-
- extern pascal void EnableIdle(void )
- TWOWORDINLINE(0x7000, 0xA485);
-
- extern pascal void DisableIdle(void )
- TWOWORDINLINE(0x7001, 0xA485);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter SleepQInstall(__A0)
- #endif
- extern pascal void SleepQInstall(SleepQRecPtr qRecPtr)
- ONEWORDINLINE(0xA28A);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter SleepQRemove(__A0)
- #endif
- extern pascal void SleepQRemove(SleepQRecPtr qRecPtr)
- ONEWORDINLINE(0xA48A);
-
- extern pascal void AOn(void )
- TWOWORDINLINE(0x7004, 0xA685);
-
- extern pascal void AOnIgnoreModem(void )
- TWOWORDINLINE(0x7005, 0xA685);
-
- extern pascal void BOn(void )
- TWOWORDINLINE(0x7000, 0xA685);
-
- extern pascal void AOff(void )
- TWOWORDINLINE(0x7084, 0xA685);
-
- extern pascal void BOff(void )
- TWOWORDINLINE(0x7080, 0xA685);
-
- /* Public Power Management API (NEW!) */
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 PMSelectorCount
- #endif
- extern pascal short PMSelectorCount(void )
- TWOWORDINLINE(0x7000, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 PMFeatures
- #endif
- extern pascal unsigned long PMFeatures(void )
- TWOWORDINLINE(0x7001, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 GetSleepTimeout
- #endif
- extern pascal UInt8 GetSleepTimeout(void )
- TWOWORDINLINE(0x7002, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter SetSleepTimeout(__D0)
- #endif
- extern pascal void SetSleepTimeout(UInt8 timeout)
- FOURWORDINLINE(0x4840, 0x303C, 0x0003, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 GetHardDiskTimeout
- #endif
- extern pascal UInt8 GetHardDiskTimeout(void )
- TWOWORDINLINE(0x7004, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter SetHardDiskTimeout(__D0)
- #endif
- extern pascal void SetHardDiskTimeout(UInt8 timeout)
- FOURWORDINLINE(0x4840, 0x303C, 0x0005, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 HardDiskPowered
- #endif
- extern pascal Boolean HardDiskPowered(void )
- TWOWORDINLINE(0x7006, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter SpinDownHardDisk
- #endif
- extern pascal void SpinDownHardDisk(void )
- TWOWORDINLINE(0x7007, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 IsSpindownDisabled
- #endif
- extern pascal Boolean IsSpindownDisabled(void )
- TWOWORDINLINE(0x7008, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter SetSpindownDisable(__D0)
- #endif
- extern pascal void SetSpindownDisable(Boolean setDisable)
- FOURWORDINLINE(0x4840, 0x303C, 0x0009, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 HardDiskQInstall(__A0)
- #endif
- extern pascal OSErr HardDiskQInstall(HDQueueElement *theElement)
- TWOWORDINLINE(0x700A, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 HardDiskQRemove(__A0)
- #endif
- extern pascal OSErr HardDiskQRemove(HDQueueElement *theElement)
- TWOWORDINLINE(0x700B, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter GetScaledBatteryInfo(__D0, __A0)
- #endif
- extern pascal void GetScaledBatteryInfo(short whichBattery, BatteryInfo *theInfo)
- FIVEWORDINLINE(0x4840, 0x303C, 0x000C, 0xA09E, 0x2080);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter AutoSleepControl(__D0)
- #endif
- extern pascal void AutoSleepControl(Boolean enableSleep)
- FOURWORDINLINE(0x4840, 0x303C, 0x000D, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 GetIntModemInfo
- #endif
- extern pascal unsigned long GetIntModemInfo(void )
- TWOWORDINLINE(0x700E, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter SetIntModemState(__D0)
- #endif
- extern pascal void SetIntModemState(short theState)
- FOURWORDINLINE(0x4840, 0x303C, 0x000F, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 MaximumProcessorSpeed
- #endif
- extern pascal short MaximumProcessorSpeed(void )
- TWOWORDINLINE(0x7010, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 CurrentProcessorSpeed
- #endif
- extern pascal short CurrentProcessorSpeed(void )
- TWOWORDINLINE(0x7011, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 FullProcessorSpeed
- #endif
- extern pascal Boolean FullProcessorSpeed(void )
- TWOWORDINLINE(0x7012, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 SetProcessorSpeed(__D0)
- #endif
- extern pascal Boolean SetProcessorSpeed(Boolean fullSpeed)
- FOURWORDINLINE(0x4840, 0x303C, 0x0013, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 GetSCSIDiskModeAddress
- #endif
- extern pascal short GetSCSIDiskModeAddress(void )
- TWOWORDINLINE(0x7014, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter SetSCSIDiskModeAddress(__D0)
- #endif
- extern pascal void SetSCSIDiskModeAddress(short scsiAddress)
- FOURWORDINLINE(0x4840, 0x303C, 0x0015, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter GetWakeupTimer(__A0)
- #endif
- extern pascal void GetWakeupTimer(WakeupTime *theTime)
- TWOWORDINLINE(0x7016, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter SetWakeupTimer(__A0)
- #endif
- extern pascal void SetWakeupTimer(WakeupTime *theTime)
- TWOWORDINLINE(0x7017, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 IsProcessorCyclingEnabled
- #endif
- extern pascal Boolean IsProcessorCyclingEnabled(void )
- TWOWORDINLINE(0x7018, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter EnableProcessorCycling(__D0)
- #endif
- extern pascal void EnableProcessorCycling(Boolean enable)
- FOURWORDINLINE(0x4840, 0x303C, 0x0019, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 BatteryCount
- #endif
- extern pascal short BatteryCount(void )
- TWOWORDINLINE(0x701A, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 GetBatteryVoltage(__D0)
- #endif
- extern pascal Fixed GetBatteryVoltage(short whichBattery)
- FOURWORDINLINE(0x4840, 0x303C, 0x001B, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter GetBatteryTimes(__D0, __A0)
- #endif
- extern pascal void GetBatteryTimes(short whichBattery, BatteryTimeRec *theTimes)
- FOURWORDINLINE(0x4840, 0x303C, 0x001C, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 GetDimmingTimeout
- #endif
- extern pascal UInt8 GetDimmingTimeout(void )
- TWOWORDINLINE(0x701D, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter SetDimmingTimeout(__D0)
- #endif
- extern pascal void SetDimmingTimeout(UInt8 timeout)
- FOURWORDINLINE(0x4840, 0x303C, 0x001E, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter DimmingControl(__D0)
- #endif
- extern pascal void DimmingControl(Boolean enableSleep)
- FOURWORDINLINE(0x4840, 0x303C, 0x001F, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 IsDimmingControlDisabled
- #endif
- extern pascal Boolean IsDimmingControlDisabled(void )
- TWOWORDINLINE(0x7020, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 IsAutoSlpControlDisabled
- #endif
- extern pascal Boolean IsAutoSlpControlDisabled(void )
- TWOWORDINLINE(0x7021, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 PMgrStateQInstall(__A0)
- #endif
- extern pascal OSErr PMgrStateQInstall(PMgrQueueElement *theElement)
- TWOWORDINLINE(0x7022, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 PMgrStateQRemove(__A0)
- #endif
- extern pascal OSErr PMgrStateQRemove(PMgrQueueElement *theElement)
- TWOWORDINLINE(0x7023, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 UpdateSystemActivity(__D0)
- #endif
- extern pascal OSErr UpdateSystemActivity(UInt8 activity)
- FOURWORDINLINE(0x4840, 0x303C, 0x0024, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 DelaySystemIdle
- #endif
- extern pascal OSErr DelaySystemIdle(void )
- TWOWORDINLINE(0x7025, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 GetStartupTimer(__A0)
- #endif
- extern pascal OSErr GetStartupTimer(StartupTime *theTime)
- TWOWORDINLINE(0x7026, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 SetStartupTimer(__A0)
- #endif
- extern pascal OSErr SetStartupTimer(StartupTime *theTime)
- TWOWORDINLINE(0x7027, 0xA09E);
-
-
- #if GENERATING68K && !GENERATINGCFM
- #pragma parameter __D0 GetLastActivity(__A0)
- #endif
- extern pascal OSErr GetLastActivity(ActivityInfo *theActivity)
- TWOWORDINLINE(0x7028, 0xA09E);
-
-
- enum {
- uppSleepQProcInfo = kRegisterBased
- | RESULT_SIZE(SIZE_CODE(sizeof(long)))
- | REGISTER_RESULT_LOCATION(kRegisterD0)
- | REGISTER_ROUTINE_PARAMETER(1, kRegisterD0, SIZE_CODE(sizeof(long)))
- | REGISTER_ROUTINE_PARAMETER(2, kRegisterA0, SIZE_CODE(sizeof(SleepQRecPtr))),
- uppHDSpindownProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(HDQueueElement *))),
- uppPMgrStateChangeProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(PMgrQueueElement *)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))
- };
-
- #if GENERATINGCFM
- #define NewSleepQProc(userRoutine) \
- (SleepQUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSleepQProcInfo, GetCurrentArchitecture())
- #define NewHDSpindownProc(userRoutine) \
- (HDSpindownUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppHDSpindownProcInfo, GetCurrentArchitecture())
- #define NewPMgrStateChangeProc(userRoutine) \
- (PMgrStateChangeUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppPMgrStateChangeProcInfo, GetCurrentArchitecture())
- #else
- #define NewSleepQProc(userRoutine) \
- ((SleepQUPP) (userRoutine))
- #define NewHDSpindownProc(userRoutine) \
- ((HDSpindownUPP) (userRoutine))
- #define NewPMgrStateChangeProc(userRoutine) \
- ((PMgrStateChangeUPP) (userRoutine))
- #endif
-
- #if GENERATINGCFM
- #define CallSleepQProc(userRoutine, message, qRecPtr) \
- CallUniversalProc((UniversalProcPtr)(userRoutine), uppSleepQProcInfo, (message), (qRecPtr))
- #define CallHDSpindownProc(userRoutine, theElement) \
- CallUniversalProc((UniversalProcPtr)(userRoutine), uppHDSpindownProcInfo, (theElement))
- #define CallPMgrStateChangeProc(userRoutine, theElement, stateBits) \
- CallUniversalProc((UniversalProcPtr)(userRoutine), uppPMgrStateChangeProcInfo, (theElement), (stateBits))
- #else
- /* (*SleepQUPP) cannot be called from a high-level language without the Mixed Mode Manager */
- #define CallHDSpindownProc(userRoutine, theElement) \
- (*(userRoutine))((theElement))
- #define CallPMgrStateChangeProc(userRoutine, theElement, stateBits) \
- (*(userRoutine))((theElement), (stateBits))
- #endif
- #endif
-
- #if PRAGMA_ALIGN_SUPPORTED
- #pragma options align=reset
- #endif
-
- #if PRAGMA_IMPORT_SUPPORTED
- #pragma import off
- #endif
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /* __POWER__ */
-
-